Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hide danger zone if not manager #1382

Conversation

carlobeltrame
Copy link
Member

@carlobeltrame carlobeltrame commented May 10, 2021

While fixing the delete dialogs, I noticed that deleting a camp is only allowed for a manager. So for now, we can hide the danger zone for users that are not managers.
I also introduce vue testing library, which is a wrapper around vue-test-utils with the goal to encourage us to write tests that are more maintainable and easier to understand. We will definitely need some common way to mock API calls, see ecamp/hal-json-vuex#65. But for now, this should do.

stubs: ['camp-settings', 'camp-address', 'camp-periods', 'camp-categories', 'camp-material-lists']
})

getByText('components.camp.campDangerzone.title')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wird hier etwas assertet?

Copy link
Member Author

@carlobeltrame carlobeltrame May 11, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja, die getBy* Funktionen in vue testing library werfen eine Exception wenn sie eine Weile lang keinen Treffer finden. Daher muss man beim Absenz-Test stattdessen die queryBy* Funktionen verwenden. Wir könnten die Präsenz-Assertion aber alternativ auch als expect(getByText('...')).toBeInTheDocument() schreiben, falls dir das intuitiver scheint.
Siehe auch https://testing-library.com/docs/guide-disappearance/#asserting-elements-are-not-present

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Würde ich intuitiver finden, da man die Details der getByText funktion nicht kennen müsste.
Ist aber geschmackssache.
Wie lange ist das Timeout von getByText?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, hab ich angepasst. Wenn der Test fehlschlägt ists halt weiterhin wegen dem Error den getByText wirft, nicht wegen dem expect. Aber liest sich vermutlich wirklich intuitiver.

Das mit dem Timeout hab ich verwechselt, getBy* und queryBy* haben keins, das Element wird nur einmal gesucht. Wenn man retries will muss man entweder waitFor verwenden, oder die dritte Familie von Queries findBy* mit async/await. waitFor hat als Standard-Timeout 1 Sekunde, und findBy* sind Convenience Funktionen für die Kombination von waitFor und getBy*, also ebenfalls standardmässig 1 Sekunde.

Siehe auch https://testing-library.com/docs/queries/about/

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Danke für die Erklärung.
Bei timeouts in "Unittests" werde ich immer hellhörig. Bin schon genug reingelaufen.

@@ -56,6 +56,11 @@ export default {
data () {
return {}
},
computed: {
isManager () {
return this.camp().role === 'manager'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich werde durch alles durchgehen, und zumindest den String 'manager' auslagern, vielleicht finde ich auch was schöneres

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Findest du es ein Problem dass hier der String manager hardcoded ist? Ich habe mal angenommen dass wir uns dazu im Backend commiten, und jede Änderung daran wäre nach dem Go-Live ein breaking change.

Ich finde es mässig cool, dass dieses Feld auf dem Camp mitgeliefert wird, und so verschiedene User verschiedene Daten vom selben Camp bekommen. Das macht es in ferner Zukunft eine Spur schwieriger, gegebenenfalls einen Caching-Layer (ähnlich wie hier) einzubauen. Aber da die Berechnung via Profil, User und Collaborators recht viel komplizierter wäre habe ich mich mal dafür entschieden dieses Feld zu nutzen.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich werde es mir mit #1238 so oder so noch anschauen.
Je nach dem werde ich eine schlauere Lösung brauchen, als überall im code this.camp().role === 'manager' zu verteilen.
Und falls nicht, würde ich die verschiedenen möglichen rollen als "Enum" zentral mappen, sodass man nicht mit search und replace renamen muss.
Aber das werde ich anschauen, du musst da nichts machen.

@carlobeltrame carlobeltrame merged commit 11fb599 into ecamp:devel May 12, 2021
@carlobeltrame carlobeltrame deleted the feature/hide-danger-zone-if-not-manager branch May 12, 2021 07:40
@BacLuc BacLuc mentioned this pull request May 14, 2021
33 tasks
@BacLuc BacLuc mentioned this pull request Jun 6, 2021
27 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants